#ifndef COMMON_H
#define COMMON_H

#include "clog.h"
#include "config.h"
#include <pthread.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @file common.h
 * @brief 公共接口和变量，供所有模块使用
 * @version 1.0
 * @author Log System Team
 * @date 2025-06-27
 */

// 公共常量定义
#define MAX_LOG_FILES 64
#define MAX_PROCESS_NAME_LEN 64
#define MAX_MESSAGE_LEN 512
#define MAX_TIMESTAMP_LEN 32
#define MAX_PATH_LEN 256

// 日志颜色代码（用于控制台输出）
#define COLOR_INFO      "\033[32m"   // 绿色
#define COLOR_DEBUG     "\033[36m"   // 青色
#define COLOR_WARNING   "\033[33m"   // 黄色
#define COLOR_ERROR     "\033[31m"   // 红色
#define COLOR_RESET     "\033[0m"    // 重置颜色

// 共享的日志缓存结构
typedef struct {
    log_message_t* messages;
    int capacity;
    int count;
    int head;
    time_t last_flush;
    pthread_mutex_t mutex;
} shared_log_buffer_t;

// 公共的实用函数声明
/**
 * @brief 获取当前进程名
 * @param buffer 输出缓冲区
 * @param size 缓冲区大小
 */
void get_process_name_safe(char* buffer, size_t size);

/**
 * @brief 检查是否应该记录此级别的日志
 * @param level 日志级别
 * @param min_level 最小级别
 * @return 1 应该记录，0 不应该记录
 */
int should_log_level(clog_level_t level, clog_level_t min_level);

/**
 * @brief 格式化输出日志到控制台（带颜色）
 * @param msg 日志消息
 * @param enable_color 是否启用颜色
 */
void print_log_to_console(const log_message_t* msg, int enable_color);

/**
 * @brief 创建并初始化共享日志缓存
 * @param buffer 缓存结构指针
 * @param buffer_size 缓存大小（字节）
 * @return 0 成功，-1 失败
 */
int init_shared_log_buffer(shared_log_buffer_t* buffer, int buffer_size);

/**
 * @brief 清理共享日志缓存
 * @param buffer 缓存结构指针
 */
void cleanup_shared_log_buffer(shared_log_buffer_t* buffer);

/**
 * @brief 格式化日志行
 * @param buffer 输出缓冲区
 * @param buffer_size 缓冲区大小
 * @param msg 日志消息
 * @return 格式化后的字符串长度
 */
int format_log_line(char* buffer, size_t buffer_size, const log_message_t* msg);

/**
 * @brief 安全的文件路径构建
 * @param dest 目标路径缓冲区
 * @param dest_size 缓冲区大小
 * @param dir 目录路径
 * @param filename 文件名
 * @return 0 成功，-1 失败
 */
int build_file_path(char* dest, size_t dest_size, const char* dir, const char* filename);

/**
 * @brief 验证配置参数的有效性
 * @param config 配置结构
 * @return 0 有效，-1 无效
 */
int validate_log_config(const log_config_t* config);

#ifdef __cplusplus
}
#endif

#endif // COMMON_H
